package 华为OD机试B卷复用题.进阶题;

import utils.MyUtil;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class HJ28_学生方阵 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner in = new Scanner(new File("src/main/java/华为OD机试B卷复用题/进阶题/input/28.txt"));
        MyUtil.START();
        Solution(in);
        MyUtil.END();
    }

    static int row, column;
    static String[][] matrix;
    static boolean[][] isVisited;
    static int result = 0;

    static void Solution(Scanner in) {
        // 初始化
        String[] nums = in.nextLine().split(",");
        row = Integer.parseInt(nums[0]);
        column = Integer.parseInt(nums[1]);
        matrix = new String[row][column];
        for (int i = 0; i < row; i++) {
            String[] sArray = in.nextLine().split(",");
            for (int j = 0; j < column; j++) {
                matrix[i][j] = sArray[j];
            }
        }
        // 处理
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                if (matrix[i][j].equals("M")) {
                    isVisited = new boolean[row][column];
                    dfs(i, j, 0, 0);
                }
            }
        }
        System.out.println(result);
    }

    // 方向：0 无向 可尝试从 4 个方向选，1 右，2 下，3 右下，4 左下
    static void dfs(int x, int y, int count, int direction) {
        result = Math.max(result, count);
        if (x < 0
                || x >= row
                || y < 0
                || y >= column
                || matrix[x][y].equals("F")
                || isVisited[x][y]) {
            return;
        }
        isVisited[x][y] = true;
        if (direction == 0) {
            dfs(x, y + 1, count + 1, 1); // 右
            dfs(x + 1, y, count + 1, 2); // 下
            dfs(x + 1, y + 1, count + 1, 3); // 右下
            dfs(x + 1, y - 1, count + 1, 4); // 左下
        }
        if (direction == 1) {
            dfs(x, y + 1, count + 1, 1); // 右
        }
        if (direction == 2) {
            dfs(x + 1, y, count + 1, 2); // 下
        }
        if (direction == 3) {
            dfs(x + 1, y + 1, count + 1, 3); // 右下
        }
        if (direction == 4) {
            dfs(x + 1, y - 1, count + 1, 4); // 左下
        }
    }
}
